/*
 * Copyright 2007 National Bioinformatics Network
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package dgbgui.tools;

import java.util.LinkedHashSet;
import java.util.Set;

import dgbgui.command.CommandStack;
import dgbgui.command.GroupCommand;
import dgbgui.command.SubmitQueryCommand;
import dgbgui.modeldocument.ModelDocument;
import dgbgui.modeldocument.Query;
import dgbgui.selection.SelectionManager;

public class ExecuteQueryTool implements Tool {

    public void execute() {
        
        // If the types have not been initialised yet, try and initialise
        // them agin
        if ( !ModelDocument.getInstance().typesInitialised() ) {
            ModelDocument.getInstance().initialiseTypesAndModels();
        }
        
        // Get all the selected query nodes and their query strings,
        // create commands for execution and execute them. These commands
        // are not undo-able
        Set<Object> selectedObjs = SelectionManager.getInstance().getSelection(Query.class);
        Set<Query> selectedNodes = new LinkedHashSet<Query>();
        for ( Object obj : selectedObjs ) {
            selectedNodes.add((Query)obj);
        }
        
        GroupCommand commands = new GroupCommand();
        for ( Query node : selectedNodes) {
            commands.add(new SubmitQueryCommand(node));
        }
        CommandStack.getInstance().execute(commands);
        
    }

}
